package com.sky.wsp.mybatis.plus.handler;

import com.sky.wsp.mybatis.plus.config.properties.DataPermissionProperties;
import com.sky.wsp.mybatis.plus.plugins.handler.MyDataPermissionHandler;
import com.sky.wsp.mybatis.plus.utils.SecurityContextHolder;

import java.util.List;

/**
 * 基于用户组织机构（Org）的数据权限处理类
 *
 * @author wangshaopeng@talkweb.com.cn
 * @Date 2023-01-11
 */
public class OrgDataPermissionHandler implements MyDataPermissionHandler {

    private final DataPermissionProperties properties;

    public OrgDataPermissionHandler(DataPermissionProperties properties) {
        this.properties = properties;
    }

    @Override
    public Long getDataCreator() {
        // user_id作为creator
        return SecurityContextHolder.getUserId();
    }

    @Override
    public String getDataCreatorColumn() {
        // user_id作为creator
        return properties.getDataCreatorColumn();
    }

    @Override
    public List<Long> getDataPermissionIdSet() {
        // org_id作为数据权限
        return SecurityContextHolder.getOrgIds();
    }

    @Override
    public String getDataPermissionIdColumn() {
        // org_id作为数据权限
        return properties.getDataPermissionIdColumn();
    }

    @Override
    public boolean ignoreTable(String tableName) {

        //忽略指定用户对数据权限的过滤
//        List<String> ignoreLoginNames=properties.getIgnoreLoginNames();
//        String loginName=SecurityContextHolder.getUsername();
//        if(null!=ignoreLoginNames && ignoreLoginNames.contains(loginName)){
//            return true;
//        }

        //忽略指定表对数据权限的过滤
        List<String> ignoreTables = properties.getIgnoreTables();
        if (null != ignoreTables && ignoreTables.contains(tableName)) {
            return true;
        }

        //需要进行数据权限数据过滤的表，没有匹配上则不加数据权限过滤条件
//        List<String> filterTables = properties.getFilterTables();
//        if (null != filterTables && !filterTables.contains(tableName)) {
//            return true;
//        }
        return false;
    }
}
